// utils/request.js
import getBaseUrl from './baseUrl'
// 基础配置
// const BASE_URL = 'http://134.175.177.137:8081/bole'; // 替换为你的接口域名
// const BASE_URL_File = 'http://134.175.177.137:8081'; // 替换为你的接口域名
// const BASE_URL = 'https://xit-edu.cn/2502boleapi/bole'; // 替换为你的接口域名
// const BASE_URL = getBaseUrl+'/bole'
const BASE_URL = getBaseUrl
const BASE_URL_File =getBaseUrl
const TIMEOUT = 15000; // 超时时间（毫秒）

// 请求拦截器（发送请求前处理）
const requestInterceptor = (config) => {
	 uni.showLoading({
	        title: '加载中...',
	        mask: true // 显示透明蒙层，防止触摸穿透
	    });
  // 自动携带 Token
  const token = uni.getStorageSync('token');
  if (token) {
    config.header = {
      ...config.header,
      'Authorization': `Bearer ${token}` // 根据后端要求修改 Token 字段
    };
  }
  return config;
};

// 响应拦截器（接收响应后处理）
const responseInterceptor = (response) => {
	// console.log(response)
 uni.hideLoading();
  const { statusCode, data } = response;
  if (data.code ==401) {
    uni.reLaunch({
    	url:'/pages/mine/login/login'
    })
	return
  }
  // 状态码非 200 视为错误
  if (statusCode !== 200) {
	  console.log(response)
	   uni.showToast({ title: data.msg || '网络错误', icon: 'error' });
	   // uni.showToast({ title: 'statusCode !==200' || '网络错误', icon: 'none' });
    return Promise.reject(new Error(`网络错误: ${statusCode}`));
  }
// console.log(response)
  // 此处根据后端数据结构调整（假设成功 code 为 200）
  if (data.code !== 200) {
    uni.showToast({ title:  '请求失败'+data.code, icon: 'error' });
    return Promise.reject(data);
  }

  return data; // 返回核心数据
};

// 封装核心请求方法
const request = (method, url, data = {}, config = {}) => {
  // 合并配置
  const mergedConfig = requestInterceptor({
    url: `${BASE_URL}${url}`,
    method: method.toUpperCase(),
    data: data,
    timeout: TIMEOUT,
    ...config
  });

  return new Promise((resolve, reject) => {
    uni.request({
      ...mergedConfig,
      success: (res) => {
        try {
          const processedData = responseInterceptor(res);
          resolve(processedData);
        } catch (error) {
          reject(error);
        }
      },
      fail: (err) => {
		 //  uni.showModal({
		 //    title: '提示',
		 //    content: JSON.stringify(err),
			// confirmText:'重新加载',
			// success(ref) {
			// 	console.log(ref)
			// 	if(ref.confirm){
			// 		uni.navigateTo({
			// 			url:'/pages/mine/login/login'
			// 		})
			// 	}
			// }
		 //  });
        uni.showToast({ title: '网络连接失败', icon: 'none' });
        reject(err);
      }
    });
  });
};

// 封装常用方法
export const http = {
  get: (url, params = {}, config = {}) => request('GET', url, params, config),
  post: (url, data = {}, config = {}) => request('POST', url, data, config),
  put: (url, data = {}, config = {}) => request('PUT', url, data, config),
  delete: (url, data = {}, config = {}) => request('DELETE', url, data, config),
  upload: (url, filePath, formData = {}, config = {}) => {
    return new Promise((resolve, reject) => {
		uni.showLoading({
			
		})
      uni.uploadFile({
        url: `${BASE_URL_File}${url}`,
        filePath: filePath,
        name: 'file', // 根据后端要求修改字段名
        formData: formData,
        header: {
          'Authorization': `Bearer ${uni.getStorageSync('token')}`
        },
        success: (res) => {
          if (res.statusCode === 200) {
            const data = JSON.parse(res.data);
            resolve(data);
          } else {
            reject(new Error(`上传失败: ${res.statusCode}`));
          }
        },
        fail: (err) => {
          uni.showToast({ title: '上传失败', icon: 'none' });
          reject(err);
        },
		complete() {
			uni.hideLoading()
		}
      });
    });
  }
};
